import { useEffect, useRef } from 'react'

const useDebounce = (callback: Function, delay: number) => {
  // 使用 useRef 来存储定时器
  const timerRef = useRef<NodeJS.Timeout | null>(null)

  // 定义防抖函数
  const debouncedCallback = (...args: any[]) => {
    // 如果已经存在定时器，则清除它
    if (timerRef.current) {
      clearTimeout(timerRef.current)
    }
    // 设置新的定时器
    timerRef.current = setTimeout(() => {
      // 当延迟时间结束后，执行回调函数
      callback(...args)
    }, delay)
  }

  // 组件卸载时清除定时器，避免内存泄漏
  useEffect(() => {
    return () => {
      if (timerRef.current) {
        clearTimeout(timerRef.current)
      }
    }
  }, [])

  return debouncedCallback
}

export default useDebounce
